﻿///*++
// * Copyright (c) DemeterSoft Corporation
// *
// * File Name:
// *     SlViewContainer.cs
// *     
// * Abstract:
// *     SlViewContainer视图容器
// *     SwitchDirection视图切换方向
// *
// * Revision History:
// *     08/24/2011    yliu
// *         创建文件
// * --*/

//using System;
//using System.Net;
//using System.Windows;
//using System.Windows.Controls;
//using System.Windows.Documents;
//using System.Windows.Ink;
//using System.Windows.Input;
//using System.Windows.Media;
//using System.Windows.Media.Animation;
//using System.Windows.Shapes;
//using System.Collections.Generic;
//using System.Windows.Controls.Primitives;

//namespace SmartSpace.Silverlight
//{
//    /// <summary>
//    /// 视图环形容器
//    /// </summary>
//    public class SlViewCircuit : Grid
//    {
//        #region fields

//        /// <summary>
//        /// 视图列表
//        /// </summary>
//        private List<SlView> m_views = new List<SlView>();

//        /// <summary>
//        /// 回退操作时，要回退的目的地视图
//        /// </summary>
//        private SlView m_backDestinationView;

//        private Size m_containerSize;

//        /// <summary>
//        /// 方向 水平 垂直
//        /// </summary>
//        private Orientation _orientation;

//        /// <summary>
//        /// 切换效果
//        /// </summary>
//        private SwitchEffect m_switchEffect = new NormalSwitchEffect();

//        #endregion

//        #region properties

//        /// <summary>
//        /// 获得视图列表
//        /// </summary>
//        public List<SlView> Views
//        {
//            get
//            {
//                return m_views;
//            }
//        }

//        /// <summary>
//        /// 获得当前显示的视图
//        /// </summary>
//        public SlView CurrentView
//        {
//            get
//            {
//                if (m_views.Count > 0)
//                {
//                    return m_views[m_views.Count - 1];
//                }
//                return null;
//            }
//        }

//        /// <summary>
//        /// 设置视图切换效果
//        /// </summary>
//        public SwitchEffect SwitchEffect
//        {
//            set
//            {
//                m_switchEffect = value;
//            }
//        }

//        #endregion

//        public SlViewCircuit()
//        {
//            m_containerSize = new Size();

//            CompositionTarget.Rendering += new EventHandler(OnCompositionTargetRendering);
//            this.SizeChanged += new SizeChangedEventHandler(OnSilverlightViewContainerSizeChanged);
//        }

//        #region api methods

//        public void AddViews(SlView view)
//        {
//            if (m_switchEffect.Direction != SwitchDirection.None)
//            {
//                // 正在切换中
//                return;
//            }

//            foreach (SlView existView in m_views)
//            {
//                if (view == existView)
//                {
//                    // 视图已经存在于视图列表中
//                    return;
//                }
//            }

//            if (CurrentView != null && !CurrentView.ConfirmExit())
//            {
//                // 视图存在，并且当前视图不允许取消
//                return;
//            }

//            //PrepareSwitch(CurrentView, view, SwitchDirection.Forward);

//            //m_views.Clear();
//            if (m_views == null)
//            {
//                m_views = new List<SlView>();
//            }
//            m_views.Add(view);
//            //view.ViewContainer = this;
//        }

//        /// <summary>
//        /// 回退视图
//        /// </summary>
//        public void Forward()
//        {
//            if (m_switchEffect.Direction != SwitchDirection.None)
//            {
//                // 正在切换中
//                return;
//            }

//            if (m_views.Count <= 1)
//            {
//                // 没有可以回退的视图了
//                return;
//            }

//            if (CurrentView != null && !CurrentView.ConfirmExit())
//            {
//                // 视图存在，并且当前视图不允许取消
//                return;
//            }

//            PrepareSwitch(CurrentView, CurrentView.ParentView, SwitchDirection.Forward);
//        }

//        /// <summary>
//        /// 回退到某视图
//        /// </summary>
//        /// <param name="view"></param>
//        public void Forward(SlView view)
//        {
//            if (m_switchEffect.Direction != SwitchDirection.None)
//            {
//                // 正在切换中
//                return;
//            }

//            // 设置回退的目的视图
//            m_backDestinationView = view;

//            if (CurrentView != m_backDestinationView)
//            {
//                // 开始回退
//                Forward();
//            }
//            else
//            {
//                // 当前视图已经是要回退的目的视图,不需要回退
//                m_backDestinationView = null;
//            }
//        }

//        /// <summary>
//        /// 回退视图
//        /// </summary>
//        public void Backward()
//        {
//            if (m_switchEffect.Direction != SwitchDirection.None)
//            {
//                // 正在切换中
//                return;
//            }

//            if (m_views.Count <= 1)
//            {
//                // 没有可以回退的视图了
//                return;
//            }

//            if (CurrentView != null && !CurrentView.ConfirmExit())
//            {
//                // 视图存在，并且当前视图不允许取消
//                return;
//            }

//            PrepareSwitch(CurrentView, CurrentView.ParentView, SwitchDirection.Backward);
//        }

//        /// <summary>
//        /// 回退到某视图
//        /// </summary>
//        /// <param name="view"></param>
//        public void Backward(SlView view)
//        {
//            if (m_switchEffect.Direction != SwitchDirection.None)
//            {
//                // 正在切换中
//                return;
//            }

//            // 设置回退的目的视图
//            m_backDestinationView = view;

//            if (CurrentView != m_backDestinationView)
//            {
//                // 开始回退
//                Backward();
//            }
//            else
//            {
//                // 当前视图已经是要回退的目的视图,不需要回退
//                m_backDestinationView = null;
//            }
//        }

//        #endregion

//        /// <summary>
//        /// 视图切换完毕
//        /// </summary>
//        /// <param name="outView">隐藏的视图</param>
//        /// <param name="inView">显示的视图</param>
//        private void OnSwitchViewCompleted(SlView outView, SlView inView)
//        {
//            // 更新界面上得视图显示
//            for (int index = this.Children.Count - 1; index >= 0; index--)
//            {
//                if (this.Children[index] != inView)
//                {
//                    this.Children.RemoveAt(index);
//                }
//            }

//            // 通知观察者
//            Notify();

//            if (outView != null)
//            {
//                outView.SwitchComplated(false);
//            }

//            inView.SwitchComplated(true);

//            // 如果是回退,判断是否已经回退到指定的位置
//            if (m_backDestinationView != null)
//            {
//                if (inView != m_backDestinationView)
//                {
//                    // 继续回退
//                    GoBack();
//                }
//                else
//                {
//                    m_backDestinationView = null;
//                }
//            }

//        }

//        private void Notify()
//        {
//            //foreach (ISlViewContainerObserver observer in m_observers)
//            //{
//            //    observer.Update(this);
//            //}
//        }

//        /// <summary>
//        /// 设置要切换的视图
//        /// </summary>
//        /// <param name="outView">淡出的视图</param>
//        /// <param name="inView">淡入的视图</param>
//        /// <param name="direction">淡入淡出的方向</param>
//        private void PrepareSwitch(SlView outView, SlView inView, SwitchDirection direction)
//        {
//            this.Children.Clear();
//            if (outView != null)
//            {
//                this.Children.Add(outView);
//            }
//            this.Children.Add(inView);

//            m_switchEffect.PrepareSwitch(this.RenderSize, outView, inView, direction);
//        }

//        private void OnSilverlightViewContainerSizeChanged(object sender, SizeChangedEventArgs e)
//        {
//            m_containerSize.Width = this.ActualWidth;
//            m_containerSize.Height = this.ActualHeight;

//            // 设置裁剪区域
//            RectangleGeometry geometry = new RectangleGeometry();
//            geometry.Rect = new Rect(0, 0, m_containerSize.Width, m_containerSize.Height);
//            this.Clip = geometry;
//        }

//        private void OnCompositionTargetRendering(object sender, EventArgs e)
//        {
//            if (m_switchEffect.Direction != SwitchDirection.None)
//            {
//                m_switchEffect.Switching(m_containerSize);

//                if (m_switchEffect.Direction == SwitchDirection.None)
//                {
//                    OnSwitchViewCompleted(m_switchEffect.OutView, m_switchEffect.InView);
//                }
//            }
//        }


//        internal void ShowMessage(string message)
//        {
//            Popup p = new Popup();
//            TextBlock tb = new TextBlock();
//            tb.Text = message;
//            p.Child = tb;
//            p.IsOpen = true;
//        }
//    }
//}
